/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.roaster.model.util; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Vector; import org.junit.Test; /** * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * */ public class TypesTest { @Test public void testIsBasicType() { assertTrue(Types.isBasicType("String")); assertTrue(Types.isBasicType("Short")); assertTrue(Types.isBasicType("int")); assertTrue(Types.isBasicType("boolean")); assertTrue(Types.isBasicType("Boolean")); assertTrue(Types.isBasicType("long")); assertTrue(Types.isBasicType("Float")); assertTrue(Types.isBasicType("Double")); } @Test public void testAreEquivalent() throws Exception { assertTrue(Types.areEquivalent("com.example.Domain", "com.example.Domain")); assertTrue(Types.areEquivalent("Domain", "com.example.Domain")); assertTrue(Types.areEquivalent("com.example.Domain", "Domain")); assertTrue(Types.areEquivalent("Domain", "Domain")); assertFalse(Types.areEquivalent("com.example.Domain", "com.other.Domain")); assertTrue(Types.areEquivalent("com.example.Domain<T>", "Domain")); assertTrue(Types.areEquivalent("Domain<T>", "com.example.Domain")); } @Test public void testIsQualified() throws Exception { assertTrue(Types.isQualified("org.jboss.forge.roaster.JavaParser")); assertFalse(Types.isQualified("JavaParser")); } @Test public void testGetPackage() throws Exception { assertEquals("com.example", Types.getPackage("com.example.Domain")); assertEquals("", Types.getPackage("Domain")); } @Test public void testIsSimpleName() throws Exception { assertTrue(Types.isSimpleName("Domain$")); assertFalse(Types.isSimpleName("9Domain$")); assertFalse(Types.isSimpleName("com.Domain$")); assertFalse(Types.isSimpleName("99")); assertFalse(Types.isSimpleName("")); assertFalse(Types.isSimpleName("Foo-bar")); } @Test public void testArray() { assertTrue(Types.isArray("byte[]")); assertTrue(Types.isArray("java.lang.Boolean[]")); assertTrue(Types.isArray("java.util.Vector[]")); assertTrue(Types.isArray(byte[].class.getName())); assertTrue(Types.isArray(Boolean[].class.getName())); assertTrue(Types.isArray(Types[].class.getName())); assertTrue(Types.isArray("Map<String,List<Long>>[]")); assertEquals("byte", Types.stripArray(byte[].class.getSimpleName())); assertEquals("Boolean", Types.stripArray(Boolean[].class.getSimpleName())); assertEquals("Vector", Types.stripArray(Vector[].class.getSimpleName())); assertEquals("byte", Types.stripArray(byte[].class.getName())); assertEquals("java.lang.Boolean", Types.stripArray(Boolean[].class.getName())); assertEquals("java.util.Vector", Types.stripArray(Vector[].class.getName())); assertEquals("java.util.Map<org.foo.String[],T>", Types.stripArray("java.util.Map<org.foo.String[],T>[]")); assertEquals("int", Types.stripArray(int[][][][][].class.getName())); assertEquals("int", Types.stripArray(int[][][][][].class.getSimpleName())); assertEquals("List<Long>", Types.stripArray("List<Long>[]")); assertEquals("java.lang.Class<?>", Types.stripArray("java.lang.Class<?>[]")); assertEquals("java.lang.Class<T>", Types.stripArray("java.lang.Class<T>[]")); assertEquals("java.lang.Class<LONG_TYPE_VARIABLE_NAME>", Types.stripArray("java.lang.Class<LONG_TYPE_VARIABLE_NAME>[]")); assertEquals("java.lang.Class<? extends Number>", Types.stripArray("java.lang.Class<? extends Number>[]")); assertEquals("java.lang.Class<E extends Enum<E>>", Types.stripArray("java.lang.Class<E extends Enum<E>>[]")); assertEquals("java.util.Map<org.Foo.MyEnum<T>,java.lang.Object>", Types.stripArray("java.util.Map<org.Foo.MyEnum<T>,java.lang.Object>[][]")); } @Test public void testArrayDimensions() { assertEquals(0, Types.getArrayDimension(Boolean.class.getName())); assertEquals(1, Types.getArrayDimension(int[].class.getName())); assertEquals(2, Types.getArrayDimension(int[][].class.getName())); assertEquals(3, Types.getArrayDimension(int[][][].class.getName())); } @Test public void testGenerics() { assertEquals("byte", Types.stripGenerics("byte")); assertEquals("byte[]", Types.stripGenerics("byte[]")); assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class")); assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<?>")); assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<? extends Number>")); assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<E extends Enum<E>>")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class[]")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<?>[]")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<T>[]")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<LONG_TYPE_VARIABLE_NAME>[]")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<? extends Number>[]")); assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<E extends Enum<E>>[]")); assertEquals("int[]", Types.stripGenerics(int[].class.getName())); assertEquals("java.util.List", Types.stripGenerics("java.util.List<String>")); assertEquals("java.util.List", Types.stripGenerics("java.util.List<java.lang.String>")); assertEquals("java.util.List", Types.stripGenerics("java.util.List<List<String>>")); assertEquals("java.util.List", Types.stripGenerics("java.util.List<List<java.lang.String>>")); assertEquals("java.util.Map[][]", Types.stripGenerics("java.util.Map<org.Foo.MyEnum<T>,java.lang.Object>[][]")); assertEquals("java.util.Map[]", Types.stripGenerics("java.util.Map<org.foo.String[],T>[]")); assertEquals("Map[]", Types.stripGenerics("Map<String,List<Long>>[]")); assertTrue(Types.isGeneric("java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>>")); } @Test public void testStringIsJavaLang() { assertTrue(Types.isJavaLang("String")); } @Test public void testAssertClassIsNotJavaLang() { assertFalse(Types.isJavaLang("AssertClass")); } @Test public void testAssertToSimpleName() throws Exception { assertEquals("List<String>", Types.toSimpleName("java.util.List<java.lang.String>")); assertEquals("List<String>", Types.toSimpleName("java.util.List<String>")); assertEquals("List<List<String>>", Types.toSimpleName("java.util.List<java.util.List<String>>")); assertEquals("List<? extends List<String>>", Types.toSimpleName("java.util.List<? extends java.util.List<String>>")); // now identical tests with array types assertEquals("List<String>[]", Types.toSimpleName("List<String>[]")); assertEquals("List<String>[]", Types.toSimpleName("java.util.List<String>[]")); assertEquals("List<String>[]", Types.toSimpleName("java.util.List<java.lang.String>[]")); assertEquals("List<? extends List<String>>[]", Types.toSimpleName("java.util.List<? extends java.util.List<String>>[]")); } @Test public void testDefaultValuesUsingClass() { assertEquals("null", Types.getDefaultValue(Object.class)); assertEquals("null", Types.getDefaultValue(List.class)); assertEquals("false", Types.getDefaultValue(boolean.class)); assertEquals("0", Types.getDefaultValue(int.class)); assertEquals("0", Types.getDefaultValue(char.class)); } @Test public void testDefaultValuesUsingString() { assertEquals("null", Types.getDefaultValue("Object")); assertEquals("null", Types.getDefaultValue("java.util.List")); assertEquals("false", Types.getDefaultValue("boolean")); assertEquals("false", Types.getDefaultValue(boolean.class.getName())); assertEquals("0", Types.getDefaultValue("int")); assertEquals("0", Types.getDefaultValue("char")); } @Test public void testIsGeneric() { assertTrue(Types.isGeneric("List<Map<String, String>>")); } @Test public void testSplitGenerics() { assertArrayEquals(new String[] { "String", "Integer" }, Types.splitGenerics("Foo<String,Integer>")); } }